1. Field of the Invention
The present invention relates generally to the field of graphics processing and more specifically to a system and method for enabling scene program functionality.
2. Description of the Related Art
A typical computing system includes a central processing unit (CPU) and a graphics processing unit (GPU). Some GPUs are capable of very high performance using a relatively large number of small, parallel execution threads on dedicated programmable hardware processing units. The specialized design of such GPUs allows these GPUs to perform certain tasks, such as rendering 3-D scenes, much faster than a CPU. However, the specialized design of these GPUs also limits the types of tasks that the GPU can perform. The CPU is typically a more general-purpose processing unit and therefore can perform most tasks. Consequently, the CPU usually executes the overall structure of software application programs and configures the GPUs to perform specific graphics-related tasks in the graphics pipeline.
To fully realize the processing capabilities of advanced GPUs, GPU functionality may be exposed to graphics application developers through an application programming interface (API) of calls and libraries. Among other things, doing so enables graphics application developers to tailor their application programs to optimize the way GPUs process graphics scenes and images. For example, in some GPUs, the API may allow the hardware processing units to be configured as shading engines (e.g., vertex, geometry, and fragment) that include geometry shaders operating in parallel.
More recently, the performance of advanced CPU processing cores has not been increasing as quickly as the performance of advanced GPUs. Consequently, there is a disparity in computing systems between the performance of the CPU processing core that is generating graphics rendering commands and the GPU that is processing these graphics rendering commands. Thus, in some computing systems, the CPU may not be able to generate and transmit graphics rendering commands at the speed with which the GPU can accept and process these commands. As a result, the CPU may become a bottleneck in the execution of the graphics calls issued by application programs, thereby hindering the performance of the GPU.
In one approach to increasing the performance of CPUs, CPU designers have been attempting to integrate more processing cores into the CPU. However, in current graphics APIs, the interface between the application programs and the GPU is usually single-threaded. In other words, the graphics calls emitted by the application programs are generated and transmitted to the GPU serially. As a result, the application programs cannot take advantage of the additional cores in the CPU to increase the speed at which the CPU generates and transmits graphics rendering commands to the GPU. Consequently, the CPU is still a bottleneck in the graphics pipeline.
As the foregoing illustrates, what is needed in the art is a technique that allows an application program to more effectively dispatch tasks to a GPU.